package ongd.web;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import ongd.negocio.gestion.ControladorUsuario;
import ongd.negocio.gestion.Usuario;
import ongd.servicios.persistencia.exceptions.IllegalOrphanException;
import ongd.servicios.persistencia.exceptions.NonexistentEntityException;
import org.primefaces.context.RequestContext;

/**
 * Clase que se encargará de listar los usuarios que no estén activos.
 *
 * @author <a href="mailto:egi0002@alu.ubu.es">Elena García Iglesias</a>
 * @author <a href="mailto:cms0021@alu.ubu.es">Cristina Martínez Sanz</a>
 * @version 1.0 20120124
 *
 */
@ManagedBean
@ViewScoped
public class Listado_BajaUsuario extends ABean {

    /**
     * Objeto del tipo controladroUsuario que nos servirá para realizar
     * todas las operaciones necesarias para activar un usuario.
     */
    private ControladorUsuario contUsuario;
    /**
     * Objeto de tipo lista de usuarios que contiene todos los usuarios desactivados de la base de datos. 
     */
    private List<Usuario> usuarios;
    /**
     * Objeto de tipo usuario que guarda los datos del usuario que queremos activar.
     */
    private Usuario usuario;
    /**
     * Objeto de tipo String que va a contener el título de la página donde
     * estemos.
     */
    private String titulo;

    /** 
     * Constructor de la clase.
     */
    public Listado_BajaUsuario() {
        SesionBean sesion = getSesionBean();
        if (sesion.iniciadaSesion()) {
            titulo = "Gestionar Bajas - Usuarios";
            contUsuario = sesion.getControladorUsuario();
            usuarios = new ArrayList<Usuario>();
            usuario = new Usuario();
            usuarios = contUsuario.obtenerUsuariosDesactivados();
        }
    }

    /**
     * Método que carga los valores iniciales en función del modo de acceso.
     */
    @Override
    public void cargaInicial() {
    }

    /**
     * Método que activa el usuario.
     * @return null.
     */
    public String activar() {
        if (getSesionBean().iniciadaSesion()) {
            RequestContext requestContext = RequestContext.getCurrentInstance();
            try {
                if (contUsuario.activarUsuario(usuario)) {
                    usuarios = contUsuario.obtenerUsuariosDesactivados();
                    requestContext.addCallbackParam("activado", true);
                } else {
                    requestContext.addCallbackParam("noActivado", true);
                }
            } catch (IllegalOrphanException ex) {
                Logger.getLogger(Listado_BajaUsuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(Listado_BajaUsuario.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(Listado_BajaUsuario.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    /**
     * Método que devuelve el controlador de usuario.
     * @return controlador de usuario.
     * @see #setContUsuario
     */
    public ControladorUsuario getContUsuario() {
        return contUsuario;
    }

    /**
     * Método que devuelve el usuario con el que estamos trabajando.
     * @return usuario.
     * @see #setUsuario
     */
    public Usuario getUsuario() {
        return usuario;
    }

    /**
     * Método que devuelve la lista de usuarios desactivados.
     * @return lista de usuarios.
     * @see #setUsuarios
     */
    public List<Usuario> getUsuarios() {
        return usuarios;
    }

    /**
     * Método que asigna un nuevo valor al controlador de usuario.
     * @param contUsuario Nuevo valor del controlador. 
     * @see #getContUsuario
     */
    public void setContUsuario(ControladorUsuario contUsuario) {
        this.contUsuario = contUsuario;
    }

    /**
     * Método que asigna un nuevo valor al usuario.
     * @param usuario nuevo usuario. 
     * @see #getUsuario
     */
    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    /**
     * Método que asigna un nuevo valor a la lista de usuarios.
     * @param usuarios nueva lista. 
     * @see #getUsuarios
     */
    public void setUsuarios(List<Usuario> usuarios) {
        this.usuarios = usuarios;
    }

    /**
     * Método que devuelve el valor de la variable titulo.
     * @return titulo
     * @see #setTitulo
     */
    public String getTitulo() {
        return titulo;
    }

    /**
     * Método que establece el valor de la variable título.
     * @param titulo Nuevo valor de la variable
     * @see #getTitulo
     */
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }
}
